iT邦幫忙

1

【程式開發筆記】讓電腦定時幫你備份重要資料,「鏡像同步、差異備份」樣樣通,Robocopy - 大漠國渡

  • 分享至 

  • xImage
  •  

同步發表至個人部落格 : 【程式開發筆記】讓電腦定時幫你備份重要資料,「鏡像同步、差異備份」樣樣通,Robocopy - 大漠國渡

前言

大漠開始寫部落格,並拍照紀錄旅遊,就碰上了「照片備份」的問題,於是上網找了開始方法,並免自己一直手動複製資料浪費時間。

看了其他攝影師的方法就是「硬碟外接盒」做「磁碟陣列 RAID 1」 或是「NAS」做「磁碟陣列 RAID 6」的熱備份,而「熱備份」比較消耗硬碟的壽命,結論就是有點燒錢啊 😖

後來發現了 Window 的 Robocopy 也有辦法做「鏡像同步」、「差異備份」,重點是可以「冷備份」延長硬碟的壽命,而且可以也跟「RAID 6」有效率的使用硬碟空間,不會因為「 RAID 1」要備份,有一半的空間無法使用的缺點 😀

那接下來的內容就是範例實作和排程設定,還有分享一下大漠幫 Robocopy 寫了一個 UI 介面 (使用者介面),方便自己操作的範例 😎

最後是一些 Robocopy 在「鏡像同步」使用到的參數的說明 😊

目錄


前言  
一、使用 Robocopy 進行「資料夾」鏡像同步
  (一)、範例
  (二)、電腦自動執行「鏡像同步」(設定排程)
二、製作成「小工具軟體」範例
三、 Robocopy 指令說明
  (一)、「基本指令」說明
    1. 「鏡像同步」基本指令
    2. 「指令參數」說明
  (二)、「進階指令」說明
    1.  「鏡像同步」進階指令
    2. 「指令參數」說明
  (三)、「最終指令」說明 (最推指令)
    1.  「鏡像同步」最終指令
    2. 「指令參數」說明

一、使用 Robocopy 進行「資料夾」鏡像同步

(一)、範例

先開啟「記事本」。
Robocopy-鏡像同步、差異備份

輸入「Robocopy <你的來源資料夾> <你的目的地資料夾> /mir /xo /e」。

上面是最簡易的指令,習慣操作之後,建議參考「進階指令」和「最終指令」做更詳細的設定 (後頭提供)。

範例 : Robocopy D:\TEST D:\TEST2 /mir /xo /e。
Robocopy-鏡像同步、差異備份

接下來將檔案儲存程「Windows 批次檔案 (.bat)」,「檔名」跟「路徑」就自己決定吧 😁
Robocopy-鏡像同步、差異備份

測試範例 :「TEST」資料夾有 7 個檔案,而「TEST2」資料夾沒有檔案。
Robocopy-鏡像同步、差異備份

可以直接滑鼠雙擊剛剛所建立的「Windows 批次檔案 (.bat)」,執行 Robocopy 進行「鏡像同步 (差異備份)」。

但是大漠想要看 Log,所以就使用「終端機」執行 😋
Robocopy-鏡像同步、差異備份

先到「Windows 批次檔案 (.bat)」,並輸入批次檔案名稱)」,執行 Robocopy 進行「鏡像同步 (差異備份)」。

不會操作「終端機」也沒關西,待會的 「進階指令」會教如何將 Log 輸出成檔案,如不想看 Log 就不要理會這段啦 😆
Robocopy-鏡像同步、差異備份

下圖是執行 Robocopy 的結果 (Log)。
Robocopy-鏡像同步、差異備份

確定「TEST」資料夾下的 7 個檔案,都複製到「TEST2」資料夾下了 😁
Robocopy-鏡像同步、差異備份

(二)、電腦自動執行「鏡像同步」(設定排程)

再來就使用 Windows 內建的「工作排程器」設定排程,來模擬「雲端硬碟」的同步 ,但是沒有即時同步的功能,最少會有 5 分鐘的時間差 😋
Robocopy-鏡像同步、差異備份

先建立新的「排程工作」。
Robocopy-鏡像同步、差異備份

先幫自己的排程命名 ~ (自己取名)

再來最重要的選項「不論使用者登入與否均執行」、「不要儲存密碼」、「以最高權限執行」和「隱藏」都要勾選,不然每次執行排程時,都會有效視窗跑出來吵你 😅
Robocopy-鏡像同步、差異備份

再來就到「處發程序」頁籤,新增「執行的時間」的設定。
Robocopy-鏡像同步、差異備份

選擇「每天」,重複工作每隔 「5 分鐘」,持續時間「不限制」,在確定最重要的「已啟用」有被勾選,最後按下「確定」,完成「執行的時間」的設定。
Robocopy-鏡像同步、差異備份

「處發程序」頁籤,就會多一筆資料,這樣一來之後「每 5 分鐘」就會自動「鏡像同步 (差異備份)」兩個資料夾了 🎉
Robocopy-鏡像同步、差異備份

再來就到「動作」頁籤,新增「要執行的程式 (指令碼)」的設定。
Robocopy-鏡像同步、差異備份

程式或指令碼,選擇剛剛建立的「Windows 批次檔案 (.bat)」,開始位置填入「批次檔案」的路徑,按下「確定」,完成「要執行的程式 (指令碼)」的設定。
Robocopy-鏡像同步、差異備份

「動作」頁籤,就會多一筆資料,在按下「確定」完成所有設定 👍
Robocopy-鏡像同步、差異備份

「工作排程器」上就多了一筆工作後,這樣就可以進行測試了 ~
Robocopy-鏡像同步、差異備份

在 12 : 55 時,於「TEST」資料夾下,新增一筆資料「8.jpg」。
Robocopy-鏡像同步、差異備份

5 分鐘後,系統就自動將「8.jpg」複製到「TEST2」資料夾下 🎊
Robocopy-鏡像同步、差異備份

二、製作成「小工具軟體」範例

大漠備份的頻率沒有很高,暫時沒有打算使用排程作鏡像備份,但又為了自己方便操作,於是就大漠幫 Robocopy 寫了一個「圖形使用者介面 (GUI)」😁

其中「鏡像同步」會用到的「進階指令」,大漠也把它加入進「大漠自製的小工具」,雖然不知道甚麼時候會用到,但我相信以後「進階指令」會用到,重點是「看起來比較專業」😂
Robocopy GUI-鏡像同步、差異備份

接下來就演示一下「大漠自製的小工具」操作過程 ~

透過「圖形使用者介面 (GUI)」選擇「來源資料夾」,就不怕輸入錯誤,或者打字打得很累 😆
Robocopy GUI-鏡像同步、差異備份

接續著選擇「目的地資料夾」~

雖然不怕打錯字,但就怕自己選錯囉 😂

所以絕對不要選反,不然要備份的資料,反而被刪除 😖
Robocopy GUI-鏡像同步、差異備份

「log 路徑」就屬於「進階指令」的範圍囉 ~

如果不小心關掉視窗,還有機會再看看「鏡像同步」的狀況 😊
Robocopy GUI-鏡像同步、差異備份

在「TEST」資料夾下,新增一筆資料「9.jpg」。
Robocopy GUI-鏡像同步、差異備份

按下「鏡像同步」開始備份 ~
Robocopy GUI-鏡像同步、差異備份

視窗下面的「執行結果」會顯示原本「執行 Robocopy 的結果」🎉
Robocopy GUI-鏡像同步、差異備份

「TEST2」資料夾下,多了一個資料「9.jpg」,確實完成備份 😎
Robocopy GUI-鏡像同步、差異備份

再來看看「log 檔案」,有出現再大漠指定的「log 路徑」下 👍
Robocopy GUI-鏡像同步、差異備份

「log 檔案」一樣是記錄著「執行 Robocopy 的結果」😏

從「紅框 1」的內容中,可以看出來大漠使用的「鏡像同步」指令。

而 「紅框 2」的內容中,可以看到「Robocopy」發現了一個新檔案「9.jpg」,並有完成備份,執行進度為 100% 😊
Robocopy GUI-鏡像同步、差異備份

三、 Robocopy 指令說明

(一)、「基本指令」說明

1. 「鏡像同步」基本指令

鏡像同步的「基本指令」指令,有以下兩種 :

如果檔案有設定過「安全性設定」,如 : 特定帳號才可瀏覽編輯的設定,就建議使用「第一種指令」,確保複製過後去的檔案也保留這些「安全性設定」。

如果自己也不清楚的話,還是建議使用「第一種指令」最保險 😆


// 第一種,會覆寫「目的地資料夾」安全性設定。
Robocopy <來源資料夾(檔案)> <目的地資料夾(檔案)> /mir /xo /e

// 第二種,不覆寫「目的地資料夾」安全性設定。
Robocopy <來源資料夾(檔案)> <目的地資料夾(檔案)> /e /xo /purge

2. 「指令參數」說明


/e
複製子資料夾 (包含空的資料夾)
  
/xo
比較「來源檔案」與「目的地檔案」,若「來源檔案」較新則複製,否則排除不複製 (差異備份,所需參數)
  
/purge
刪除不存在於「來源資料夾」中的檔案 (差異備份,所需參數)
  
/mir 
鏡像資料夾 (相當於同時使用 /e 和 /purge 參數)。

(二)、「進階指令」說明

1. 「鏡像同步」進階指令

大漠針對了「搬檔效率」、「Log 資訊」需求,又挑選了部分的參數做使用,使其功能更完善 😎

更多參數詳 微軟 Robocopy 學習網。


Robocopy <來源資料夾(檔案)> <目的地資料夾(檔案)> /e /xo /mir /mt: /dcopy:dat /xa:sh /xj /unicode /eta /R:5 /W:30 /tee /unilog+:D:\mirrorDir.txt /v 

2. 「指令參數」說明

/mt:<n> 
使用 n 個執行緒,執行工作。(如同 n 個人一起搬運檔案) 預設值是 8,最上值128。
需搭配使用 /log 參數,集中倒出,提升效能。
  
/log:<logfile>
使用系統編碼(Big5)寫入記錄檔。(若記錄檔已存在,覆寫現有的記錄檔)

/log+:<logfile>
使用系統編碼(Big5)寫入記錄檔。(若記錄檔已存在,接續寫入記錄檔)

/unilog:<logfile>
使用 UTF-8 編碼寫入記錄檔。(若記錄檔已存在,覆寫現有的記錄檔)

/unilog+:<logfile>
使用 UTF-8 編碼寫入記錄檔。(若記錄檔已存在,接續寫入記錄檔)

/dcopy:<copyflags> 
複製資料夾的內容。
D - 資料
A - 屬性
T - 時間戳記
E - 擴充屬性
X - 略過替代資料流
此選項的預設值為 DA (資料和屬性)。

/xa:[RASHCNETO]
符合以下屬性的檔案不處理。
R - 唯讀
A - 封存
S - 系統
H - 隱藏
C - 已壓縮
N - 未編製內容索引
E - 已加密
T - 暫存
O - 離線

/xj  
不複製 NTFS junction 檔案。

/unicode 
輸出內容使用 UTF-8 編碼。

/eta
顯示所複製檔案的預估抵達時間 (ETA)。

/r:<n> 
複製失敗,重新嘗試的次數,n 的預設值為 1,000,000 (一百萬次重試)。

/w:<n> 
複製失敗,重新嘗試的等候時間,以秒為單位,n 的預設值為 30 (等待時間為 30 秒)。

/tee 
將狀態輸出寫入主控台視窗及記錄檔。

/v 
產生詳細資訊輸出,並顯示所有略過的檔案。

(三)、「最終指令」說明 (最推指令)

1. 「鏡像同步」最終指令

這大漠自己在用的指令,也是最推薦的指令,顧及了「搬檔效率」、「Log 資訊」和「資安疑慮」🚓


Robocopy <來源資料夾(檔案)> <目的地資料夾(檔案)> /e /xo /mir /mt: /dcopy:dat /xa:sh /xj /unicode /eta /R:5 /W:30 /tee /unilog+:D:\mirrorDir.txt /v /xf *.tmp *.ds_store *.temp ~desktop.ini ~hiberfil.sys ~pagefile.sys ~thumbs.db ~swapfile.sys ~NTUSER.DAT ~ntuser.dat.LOG1 ~ntuser.dat.LOG2 $recycle.bin config.msi ntuser.dat ntuser.ini /xd "C:\Windows" "C:\ProgramData\Microsoft\Windows\Caches" "C:\Drivers" "C:\Temp" "C:\Documents and Settings" "*MSOCache*" "*RecycleBin*" "*recycler*" "*System Volume Information*"

2. 「指令參數」說明

避免複製系統的重要檔案,引發資安問題,大漠就使用「/xf」及「/xd」兩項參數,排除了系統「特定檔案」及「特定路徑」。

以下說明有列出排除「檔案」及「路徑」,給大家參考。


/xf <filename>[ ...]
符合指定名稱或路徑的檔案,支援使用萬用字元 (* 和 ?)。

*.tmp 
*.ds_store 
*.temp 
~desktop.ini 
~hiberfil.sys 
~pagefile.sys 
~thumbs.db 
~swapfile.sys 
~NTUSER.DAT 
~ntuser.dat.LOG1 
~ntuser.dat.LOG2 
$recycle.bin 
config.msi 
ntuser.dat 
ntuser.ini 

/xd <directory>[ ...] 
排除符合指定名稱和路徑的目錄。

"C:\Windows" 
"C:\ProgramData\Microsoft\Windows\Caches" 
"C:\Drivers" 
"C:\Temp" 
"C:\Documents and Settings" 
"*MSOCache*" 
"*RecycleBin*" 
"*recycler*" 
"*System Volume Information*"


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言